#include <iostream>
#include <unordered_map>

using namespace std;

// 饿汉模式的例子
// 保证全局只有一份实例，那么就要保证不能在类外实例化对象
class singleton
{
public:
    static singleton& getInstance()
    {
        return _inst;
    }
    void addKV(const string& key, const string& val)
    {
        hash[key] = val;
    }
    void Print()
    {
        for(auto [x, y] : hash)
        {
            cout << x << " " << y << endl;
        }
    }

private:
    singleton(){} // 私有化构造
    singleton(const singleton&) = delete; // 禁用拷贝构造
    singleton& operator=(const singleton&) = delete; // 禁用赋值运算符重载函数
    unordered_map<string, string> hash;

    static singleton _inst; // 声明静态成员变量
};

// 定义静态成员变量
singleton singleton::_inst;

int main()
{
    singleton::getInstance().addKV("hello", "你好");
    singleton::getInstance().Print();
    return 0;
}